using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;

public partial class admin : System.Web.UI.Page
{
	Databank db = Databank.DatabankInstantie;

    protected void Page_Load(object sender, EventArgs e) {
	}

	#region overzicht

	protected void BulletedListOverzicht_Click(object sender, BulletedListEventArgs e) {
		switch (e.Index){
			case 0:
				OpenGebruikersBeheer();
				break;
			case 1:
				OpenOpleidingenBeheer();
				break;
			case 2:
				OpenVakkenBeheer();
				break;
		}
	}

	#endregion

	#region gebruikersbeheer

	protected void OpenGebruikersBeheer() {
		BeheerMultiView.ActiveViewIndex = 0;

		//form leegmaken
		GebruikersListBox.Items.Clear();
		GebruikerDetailsButton.Enabled = false;
		GebruikerVerwijderenButton.Enabled = false;
		FilterResetButton.Visible = false;
		FilterGebruikersnaamTextBox.Text = "";

		//componenten vullen
		FilterLabel.Text = "Alle gebruikers weergeven";

		List<string> gebruikers = db.GetGebruikers();
		foreach (string gebruiker in gebruikers) {
			GebruikersListBox.Items.Add(gebruiker);
		}

		RichtingenDropDownList.Items.Clear();
		List<Richting> richtingen = db.GetRichtingen();
		foreach (Richting r in richtingen) {
			RichtingenDropDownList.Items.Add(new ListItem(r.Naam, r.Id.ToString()));
		}
	}

	protected void GebruikerDetailsButton_Click(object sender, EventArgs e) {
		OpenGebruiker(GebruikersListBox.SelectedValue);
	}

	protected void GebruikerToevoegenButton_Click(object sender, EventArgs e) {
		OpenGebruiker();
	}

	protected void GebruikersListBox_SelectedIndexChanged(object sender, EventArgs e) {
		GebruikerDetailsButton.Enabled = true;
		GebruikerVerwijderenButton.Enabled = true;
	}

	protected void GebruikerVerwijderenButton_Click(object sender, EventArgs e) {
		String gid = GebruikersListBox.SelectedValue;

		if (gid != null) {
			db.DelGebruiker(GebruikersListBox.SelectedValue);

			OpenGebruikersBeheer();
		}
	}

	protected void FilterGebruikersnaamButton_Click(object sender, EventArgs e) {
		FilterLabel.Text = "Gebruikers met naam: *" + FilterGebruikersnaamTextBox.Text + "*";
		FilterResetButton.Visible = true;
		GebruikerDetailsButton.Enabled = false;
		GebruikerVerwijderenButton.Enabled = false;

		GebruikersListBox.Items.Clear();

		List<string> gebruikers = db.GetGebruikers();
		foreach (string gebruiker in gebruikers) {
			if (gebruiker.Contains(FilterGebruikersnaamTextBox.Text)){
				GebruikersListBox.Items.Add(gebruiker);
			};
		}
	}

	protected void FilterRichtingButton_Click(object sender, EventArgs e) {
		FilterGebruikersnaamTextBox.Text = "";
		FilterLabel.Text = "Gebruikers in richting: " + RichtingenDropDownList.SelectedItem.Text;
		FilterResetButton.Visible = true;
		GebruikerDetailsButton.Enabled = false;
		GebruikerVerwijderenButton.Enabled = false;

		GebruikersListBox.Items.Clear();

		List<string> gebruikers = db.GetRichtingGebruikers(int.Parse(RichtingenDropDownList.SelectedValue));
		foreach (string gebruiker in gebruikers) {
			GebruikersListBox.Items.Add(gebruiker);
		}
	}

	protected void FilterResetButton_Click(object sender, EventArgs e) {
		OpenGebruikersBeheer();
	}

	#endregion

	#region gebruiker

	protected void OpenGebruiker(string gebruikernaam) {
		BeheerMultiView.ActiveViewIndex = 2;

		PanelGebruiker.Visible = true;
		GebruikerAanmakenButton.Visible = false;
		GebruikerVoorbeeldLabel.Visible = false;
		GebruikerNaamTextBox.ReadOnly = true;

		GebruikerNaamTextBox.Text = gebruikernaam;

		GebruikerRolVerwijderenButton.Enabled = false;
		GebruikerRichtingVerwijderenButton.Enabled = false;
		MentorPanel.Visible = false;
		MentorVerwijderenButton.Enabled = false;

		//lijst alle rollen
		GebruikerRollenDropDownList.Items.Clear();
		List<string> rollen = db.GetRollen();
		foreach (string rol in rollen) {
			GebruikerRollenDropDownList.Items.Add(rol);
		}

		//lijst alle richtingen
		GebruikerRichtingenDropDownList.Items.Clear();
		List<Richting> richtingen = db.GetRichtingen();
		foreach (Richting r in richtingen) {
			GebruikerRichtingenDropDownList.Items.Add(new ListItem(r.Naam, r.Id.ToString()));
		}

		//lijst rollen gebruiker
		GebruikerRollenListBox.Items.Clear();
		rollen = db.GetRollenGebruiker(gebruikernaam);
		foreach (string rol in rollen) {
			GebruikerRollenListBox.Items.Add(rol);
		}

		//lijst richtingen gebruiker
		GebruikerRichtingenListBox.Items.Clear();
		richtingen = db.GetGebruikerRichtingen(gebruikernaam);
		foreach (Richting r in richtingen) {
			GebruikerRichtingenListBox.Items.Add(new ListItem(r.Naam,r.Id.ToString()));
		}

		//lijst studenten mentor
		if ((db.Ismentor(gebruikernaam)) || (db.IsMentorZonderStudenten(gebruikernaam))) {
			MentorListBox.Items.Clear();
			MentorPanel.Visible = true;
			List<string> stud = db.GetMentorGebruikers(gebruikernaam);
			foreach (String student in stud) {
				MentorListBox.Items.Add(new ListItem(student));
			}
		}
		//lijst alle studenten
		MentorDropDownList.Items.Clear();
		List<String> gebruikers = db.GetGebruikers();
		foreach (String gebruiker in gebruikers) {
			MentorDropDownList.Items.Add(gebruiker);
		}
	}

	protected void OpenGebruiker() {
		BeheerMultiView.ActiveViewIndex = 2;

		GebruikerAanmakenButton.Visible = true;
		GebruikerVoorbeeldLabel.Visible = true;
		PanelGebruiker.Visible = false;
		GebruikerNaamTextBox.ReadOnly = false;

		GebruikerNaamTextBox.Text = "";
	}

	protected void GebruikerAanmakenButton_Click(object sender, EventArgs e) {
		String gid = GebruikerNaamTextBox.Text;

		int aid = db.AddAgenda(gid);
		db.AddGebruiker(aid, gid);

		OpenGebruiker(gid);
	}

	protected void GebruikerRollenListBox_SelectedIndexChanged(object sender, EventArgs e) {
		GebruikerRolVerwijderenButton.Enabled = true;
		GebruikerRollenListBox.Focus();
	}

	protected void GebruikerRichtingenListBox_SelectedIndexChanged(object sender, EventArgs e) {
		GebruikerRichtingVerwijderenButton.Enabled = true;
		GebruikerRichtingenListBox.Focus();
	}

	protected void MentorListBox_SelectedIndexChanged(object sender, EventArgs e) {
		MentorVerwijderenButton.Enabled = true;
		MentorListBox.Focus();
	}

	protected void GebruikerRolToevoegenButton_Click(object sender, EventArgs e) {
		db.AddRolGebruiker(GebruikerNaamTextBox.Text, GebruikerRollenDropDownList.SelectedValue);

		OpenGebruiker(GebruikerNaamTextBox.Text);
		GebruikerRollenListBox.Focus();
	}

	protected void GebruikerRolVerwijderenButton_Click(object sender, EventArgs e) {
		db.DelRolGebruiker(GebruikerNaamTextBox.Text, GebruikerRollenListBox.SelectedValue);

		OpenGebruiker(GebruikerNaamTextBox.Text);
		GebruikerRollenListBox.Focus();
	}

	protected void GebruikerRichtingToevoegenButton_Click(object sender, EventArgs e) {
		db.AddGebruikerRichting(int.Parse(GebruikerRichtingenDropDownList.SelectedValue), GebruikerNaamTextBox.Text);

		OpenGebruiker(GebruikerNaamTextBox.Text);
		GebruikerRichtingenListBox.Focus();
	}

	protected void GebruikerRichtingVerwijderenButton_Click(object sender, EventArgs e) {
		db.DelGebruikerRichting(int.Parse(GebruikerRichtingenListBox.SelectedValue), GebruikerNaamTextBox.Text);

		OpenGebruiker(GebruikerNaamTextBox.Text);
		GebruikerRichtingenListBox.Focus();
	}

	protected void MentorToevoegenButton_Click(object sender, EventArgs e) {
		db.AddMentorGebruiker(GebruikerNaamTextBox.Text, MentorDropDownList.SelectedValue, db.GetGebruikerRichtingen(GebruikerNaamTextBox.Text)[0].Id);

		OpenGebruiker(GebruikerNaamTextBox.Text);
		MentorListBox.Focus();
	}

	protected void MentorVerwijderenButton_Click(object sender, EventArgs e) {
		db.DelMentorGebruiker(GebruikerNaamTextBox.Text, MentorListBox.SelectedValue, db.GetGebruikerRichtingen(GebruikerNaamTextBox.Text)[0].Id);

		OpenGebruiker(GebruikerNaamTextBox.Text);
		MentorListBox.Focus();
	}

	#endregion

	#region opleidingenbeheer

	protected void OpenOpleidingenBeheer() {
		BeheerMultiView.ActiveViewIndex = 1;

		//form leegmaken
		OpleidingenListBox.Items.Clear();
		OpleidingDetailsButton.Enabled = false;

		//componenten vullen
		List<Richting> richtingen = db.GetRichtingen();
		foreach (Richting r in richtingen) {
			OpleidingenListBox.Items.Add(new ListItem(r.Naam, r.Id.ToString()));
		}
	}

	protected void OpleidingDetailsButton_Click(object sender, EventArgs e) {
		BeheerMultiView.ActiveViewIndex = 3;

		OpenOpleiding(int.Parse(OpleidingenListBox.SelectedValue));

	}

	protected void OpleidingToevoegenButton_Click(object sender, EventArgs e) {
		BeheerMultiView.ActiveViewIndex = 3;

		OpenOpleiding();
	}

	protected void OpleidingenListBox_SelectedIndexChanged(object sender, EventArgs e) {
		OpleidingDetailsButton.Enabled = true;
		OpleidingenListBox.Focus();
	}

	#endregion

	#region opleiding

	private void OpenOpleiding(int rid) {
		//wijzigen van richting

		opleidingButton.Text = "Wijzigingen opslaan";
		OpleidingStudentenVerwijderenButton.Enabled = false;
		OpleidingVakkenVerwijderenButton.Enabled = false;

		Richting r = db.GetRichting(rid);
		NaamOpleidingTextBox.Text = r.Naam;
		AfstudeerrichtingTextBox.Text = r.AfstudeerRichting;

		OpleidingscoordinatorDropDownList.Items.Clear();
		OpleidingStudentenDropDownList.Items.Clear();
		List<string> gebruikers = db.GetGebruikers();
		foreach (String gebruiker in gebruikers) {
			OpleidingscoordinatorDropDownList.Items.Add(gebruiker);
			OpleidingStudentenDropDownList.Items.Add(gebruiker);

			if (gebruiker == r.OpleidingsCoordinator) {
				OpleidingscoordinatorDropDownList.SelectedIndex = OpleidingscoordinatorDropDownList.Items.Count - 1;
			}
		}

		OpleidingStudentenPanel.Visible = true;
		OpleidingStudentenListBox.Items.Clear();
		gebruikers = db.GetRichtingGebruikers(rid);
		foreach (String gebruiker in gebruikers) {
			OpleidingStudentenListBox.Items.Add(gebruiker);
		}

		//vakken
		OpleidingVakkenDropDownList.Items.Clear();
		OpleidingVakkenListBox.Items.Clear();

		List<Vak> vakken = db.GetVakkenRichting(rid);
		foreach (Vak vak in vakken) {
			OpleidingVakkenListBox.Items.Add(new ListItem(vak.Naam, vak.Id.ToString()));
		}

		vakken = db.GetVakken();
		foreach (Vak vak in vakken) {
			OpleidingVakkenDropDownList.Items.Add(new ListItem(vak.Naam, vak.Id.ToString()));
		}
	}

	private void OpenOpleiding() {
		//nieuwe richting toevoegen
		
		opleidingButton.Text = "Opleiding toevoegen";
		NaamOpleidingTextBox.Text = "";
		AfstudeerrichtingTextBox.Text = "";

		OpleidingscoordinatorDropDownList.Items.Clear();
		List<string> gebruikers = db.GetGebruikers();
		foreach (String gebruiker in gebruikers) {
			OpleidingscoordinatorDropDownList.Items.Add(gebruiker);
		}

		OpleidingStudentenPanel.Visible = false;
	}

	protected void OpleidingStudentenListBox_SelectedIndexChanged(object sender, EventArgs e) {
		OpleidingStudentenVerwijderenButton.Enabled = true;
		OpleidingStudentenListBox.Focus();
	}

	protected void OpleidingVakkenListBox_SelectedIndexChanged(object sender, EventArgs e) {
		OpleidingVakkenVerwijderenButton.Enabled = true;
		OpleidingVakkenListBox.Focus();
	}
	
	protected void opleidingButton_Click(object sender, EventArgs e) {
		if (opleidingButton.Text == "Wijzigingen opslaan") {
			//opleiding wijzigen

			db.UpdateRichting(new Richting(int.Parse(OpleidingenListBox.SelectedValue), NaamOpleidingTextBox.Text, AfstudeerrichtingTextBox.Text, 0, OpleidingscoordinatorDropDownList.SelectedValue));
			OpenOpleidingenBeheer();
		} else {
			//opleiding toevoegen

			int aid = db.AddAgenda(NaamOpleidingTextBox.Text);
			int rid = db.AddRichting(new Richting(NaamOpleidingTextBox.Text, AfstudeerrichtingTextBox.Text, aid, OpleidingscoordinatorDropDownList.SelectedValue));
			OpenOpleiding(rid);
		}
	}

	protected void OpleidingStudentenToevoegenButton_Click(object sender, EventArgs e) {
		db.AddGebruikerRichting(int.Parse(OpleidingenListBox.SelectedValue), OpleidingStudentenDropDownList.SelectedValue);

		OpenOpleiding(int.Parse(OpleidingenListBox.SelectedValue));
		OpleidingStudentenListBox.Focus();
	}

	protected void OpleidingStudentenVerwijderenButton_Click(object sender, EventArgs e) {
		db.DelGebruikerRichting(int.Parse(OpleidingenListBox.SelectedValue), OpleidingStudentenListBox.SelectedValue);

		OpenOpleiding(int.Parse(OpleidingenListBox.SelectedValue));
		OpleidingStudentenListBox.Focus();
	}

	protected void OpleidingVakkenToevoegenButton_Click(object sender, EventArgs e) {
		db.AddVakRichting(int.Parse(OpleidingenListBox.SelectedValue), int.Parse(OpleidingVakkenDropDownList.SelectedValue));

		OpenOpleiding(int.Parse(OpleidingenListBox.SelectedValue));
		OpleidingVakkenListBox.Focus();
	}

	protected void OpleidingVakkenVerwijderenButton_Click(object sender, EventArgs e) {
		db.DelVakRichting(int.Parse(OpleidingenListBox.SelectedValue), int.Parse(OpleidingVakkenListBox.SelectedValue));

		OpenOpleiding(int.Parse(OpleidingenListBox.SelectedValue));
		OpleidingVakkenListBox.Focus();
	}

	#endregion

	#region vakkenbeheer

	private void OpenVakkenBeheer() {
		BeheerMultiView.ActiveViewIndex = 4;

		VakDetailsButton.Enabled = false;

		VakkenListBox.Items.Clear();
		List<Vak> vakken = db.GetVakken();
		foreach (Vak vak in vakken) {
			VakkenListBox.Items.Add(new ListItem(vak.Naam, vak.Id.ToString()));
		}
	}

	protected void VakDetailsButton_Click(object sender, EventArgs e) {
		OpenVak(int.Parse(VakkenListBox.SelectedValue));
	}

	protected void VakToevoegenButton_Click(object sender, EventArgs e) {
		OpenVak();
	}

	protected void VakkenListBox_SelectedIndexChanged(object sender, EventArgs e) {
		VakDetailsButton.Enabled = true;
	}

	#endregion

	#region vak

	private void OpenVak() {
		BeheerMultiView.ActiveViewIndex = 5;

		VakButton.Text = "Vak toevoegen";

		VakCodeTextBox.Text = "";
		VakNaamTextBox.Text = "";
	}

	private void OpenVak(int vid) {
		BeheerMultiView.ActiveViewIndex = 5;

		VakButton.Text = "Wijzigingen opslaan";

		Vak v = db.GetVak(vid);
		VakCodeTextBox.Text = v.Code;
		VakNaamTextBox.Text = v.Naam;
	}

	protected void VakButton_Click(object sender, EventArgs e) {
		if (VakButton.Text == "Vak toevoegen") {
			//vak toevoegen

			db.AddVak(new Vak(VakNaamTextBox.Text, VakCodeTextBox.Text));
			OpenVakkenBeheer();
		} else {
			//vak wijzigen

			db.UpdateVak(new Vak(int.Parse(VakkenListBox.SelectedValue), VakNaamTextBox.Text, VakCodeTextBox.Text));
			OpenVakkenBeheer();
		}
	}

	#endregion
}